1644
7152
Ik heb een array statsname als
appel
X
banaan
Y
Kiwi
z
Ik moet appel, banaan en kiwi in een reeks Vruchten plaatsen en X, Y en Z in een reeks met de naam alfabetten.
Een eenvoudig C # -mechanisme ervoor alstublieft? 
Gebruik de IEnumerable  .Where overload die de index levert.
var fruits = statsname.Where ((s, i) => i% 2 == 0) .ToArray ();
var alphabets = statsname.Where ((s, i) => i% 2! = 0) .ToArray ();
|
Gestolen van Hoe alternatieve elementen te krijgen met behulp van Enumerable in C #
var fruits = myArray.Where ((t, i) => i% 2 == 0) .ToArray ();
var alfabetten = myArray.Where ((t, i) => i% 2 == 1) .ToArray ();
|
Als ik je vraag goed heb begrepen, is wat je wilt heel eenvoudig:
Je wilt fruit in een reeks fruit plaatsen en hetzelfde voor alfabetten en ze verschijnen afwisselend in array statsname, dus:
voor (int i = 0, j = 0; i  list = new List  () {"appel", "X", "banaan", "Y", "Kiwi", "z"};
var result = list.Select ((l, i) => nieuw {l, i})
.GroupBy (p => p.i% 2)
.Select (x => x.Select (v => v.l) .ToList ())
.ToList ();
Dan heb je een lijst met lijsten:
|
list  fruits = new List  ();
list  alphabet = new List  ();
voor (int i = 0; i  everyOther  (IEnumerable  collectie)
{
met (var e = collection.GetEnumerator ()) {
while (e.MoveNext ()) {
opbrengst rendement e.Current;
e.MoveNext (); // sla een over
}
}
}
U kunt System.Linq.Skip gebruiken om het eerste element over te slaan.
string [] words = "appel X banaan Y Kiwi z" .Split ();
var fruits = everyOther (woorden);
var alfabetten = everyOther (words.Skip (1));
Gebruik ze gewoon als een nieuwe verzameling of roep .ToArray () of .ToList () erop aan:
foreach (string f in fruits)
Console.WriteLine (f);
string [] anArray = fruits.ToArray (); // met System.Linq
Nu heb je wat je nodig hebt.
Iteratoren zijn methoden die rendement opleveren, zie Iteratoren (C # Programming Guide). Dit is een zeer sterk kenmerk van de taal. Jij kan:
elementen overslaan
versier elementen
de volgorde wijzigen
sequenties samenvoegen (zie System.Linq.Concat)
...
|
Hier is wat werkende code, hopelijk zal dit je helpen:
systeem gebruiken;
met behulp van System.Collections.Generic;
met behulp van System.IO;
met System.Linq;
met System.Text;
met behulp van System.Threading.Tasks;
naamruimte ReadFile
{
klasse Programma
{
static void ReadFile (string filePath, List  custumerNames, List  phoneNumbers)
{
string line = string.Empty;
var fileStream = nieuwe StreamReader (filePath);
bool isPhoneNumber = true;
while ((line = fileStream.ReadLine ())! = null)
{
if (isPhoneNumber)
{
phoneNumbers.Add (Convert.ToInt32 (lijn));
isPhoneNumber = false;
}
anders
{
custumerNames.Add (regel);
isPhoneNumber = true;
}
}
fileStream.Close ();
}
static void Main (string [] args)
{
Console.WriteLine ("Begonnen met het lezen van het bestand ...");
List  custumersNamesList = new List  ();
List  custumersPhonesNumbers = new List  ();
ReadFile ("SampleFile.txt", custumersNamesList, custumersPhonesNumbers);
// Ervan uitgaande dat beide lijsten dezelfde lengte hebben.
voor (int i = 0; i